# build in python 3.5.2
# 作者：陈常鸿
# 预测函数有bug
import numpy as np
sigmoid=lambda x:1+np.exp(-x)                    # sigmoid函数
init=lambda dim:list([np.zeros((dim,1)),0.0])    # 对模型初始化,第一个返回值为w,第二个返回值为b
# 前向传播函数，第一个返回值为迭代后的w和b值字典，第二个参数为cost值
propagate=lambda w,b,x,y:list([{'dw':np.dot(x,(sigmoid(np.dot(w.T,x)+b)-y).T)/x.shape[1],'db':np.sum(sigmoid(np.dot(w.T,x)+b)-y)/x.shape[1]},np.squeeze(-1/x.shape[1]*np.sum(y*np.log(sigmoid(np.dot(w.T,x)+b)))+(1-y)*np.log(1-sigmoid(np.dot(w.T,x)+b)))])
# 预测函数
predict=lambda w,b,x:[np.zeros((1,x.shape[1]))[:,i]=1 if sigmoid(np.dot(w.T,x)+b)[:,i]>0.5 else np.zeros((1,x.shape[1]))[:,i]=0 for i in range(sigmoid(np.dot(w.T,x)+b).shape[1])]